Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Commit 2db81471ddd9fb5db527163533a9192f22996794


Parents : 51f51dc
Author : Ivan <ivan@quad4.io>
Signature : Signature validation error
Date : 2026-04-26T15:00:30-05:00

feat(messages): fix outbound message status handling by introducing a new method for title generation and improving propagation state messaging

Changes
Diff

diff --git a/meshchatx/src/frontend/components/messages/ConversationMessageEntry.vue b/meshchatx/src/frontend/components/messages/ConversationMessageEntry.vue
index a598429c..6b8af1a9 100644
--- a/meshchatx/src/frontend/components/messages/ConversationMessageEntry.vue
+++ b/meshchatx/src/frontend/components/messages/ConversationMessageEntry.vue
@@ -211,9 +211,7 @@
icon-name="check"
class="size-3"
:class="cv.outboundBubbleSentCheckIconClass(entry.items[0])"
- :title="
- entry.items[0].lxmf_message.state === 'propagated' ? 'Sent to propagation node' : 'Sent'
- "
+ :title="cv.outboundSentStatusTitle(entry.items[0].lxmf_message)"
/>
<svg
v-else-if="
@@ -905,7 +903,7 @@
icon-name="check"
class="size-3"
:class="cv.outboundBubbleSentCheckIconClass(chatItem)"
- :title="chatItem.lxmf_message.state === 'propagated' ? 'Sent to propagation node' : 'Sent'"
+ :title="cv.outboundSentStatusTitle(chatItem.lxmf_message)"
/>
<svg
v-else-if="cv.showRichOutboundPendingUi(chatItem) && cv.isOutboundPendingForUi(chatItem)"

diff --git a/meshchatx/src/frontend/components/messages/ConversationViewer.vue b/meshchatx/src/frontend/components/messages/ConversationViewer.vue
index 203eba54..b51151c9 100644
--- a/meshchatx/src/frontend/components/messages/ConversationViewer.vue
+++ b/meshchatx/src/frontend/components/messages/ConversationViewer.vue
@@ -3496,6 +3496,16 @@ export default {
if (lxmfMessage._pendingPathfinding) {
return "Finding path: Reticulum is resolving a route to this peer. Your message sends when the route is ready.";
}
+ if (lxmfMessage.method === "propagated") {
+ if (lxmfMessage.state === "sending" && (lxmfMessage.progress ?? 0) > 0) {
+ return this.$t("messages.outbound_pending_propagation_with_progress", {
+ progress: Number(lxmfMessage.progress).toFixed(0),
+ });
+ }
+ if (["sending", "outbound", "generating"].includes(lxmfMessage.state)) {
+ return this.$t("messages.outbound_pending_propagation");
+ }
+ }
if (lxmfMessage.state === "generating") {
return "Preparing message…";
}
@@ -3507,6 +3517,15 @@ export default {
}
return "Pending";
},
+ outboundSentStatusTitle(lxmfMessage) {
+ if (!lxmfMessage) {
+ return "";
+ }
+ if (lxmfMessage.method === "propagated") {
+ return this.$t("messages.outbound_on_propagation_node");
+ }
+ return this.$t("messages.outbound_sent_network");
+ },
isOutboundWaitingBubble(chatItem) {
return Boolean(chatItem?.is_outbound && chatItem?.lxmf_message?._pendingPathfinding);
},
@@ -3752,6 +3771,9 @@ export default {
return "Sending";
}
if (lxmfMessage.state === "outbound") {
+ if (lxmfMessage.method === "propagated") {
+ return this.$t("messages.outbound_pending_propagation");
+ }
return "Outbound";
}
return this.outboundSendingStatusTooltip(lxmfMessage);


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────